package fachada;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import rh.Cargo;
import rh.Funcionario;
import rh.Gestor;
import rh.Setor;
import rh.TipoGerencia;
import seguranca.Usuario;
import basicas.Cliente;
import basicas.Contrato;
import basicas.Empresa;
import basicas.FormaPagamento;
import basicas.ItemVeiculo;
import basicas.Marca;
import basicas.Modelo;
import basicas.Pagamento;
import basicas.Reserva;
import basicas.SituacaoVeiculo;
import basicas.TipoCombustivel;
import basicas.TipoEmpresa;
import basicas.Veiculo;
import exception.NegocioException;

public interface IFachada {

	// Cliente
	public void inserir(Cliente entidade) throws Exception;

	public void alterar(Cliente entidade) throws Exception;

	public void remover(Cliente cliente) throws Exception;

	public List<Cliente> consultarTodosCliente();

	public Cliente consultarClientePorId(Integer id);

	// ---------------CARGO-----------------------
	public void inserir(Cargo cargo);

	public void alterar(Cargo cargo);

	public void remover(Cargo cargo);

	public List<Cargo> consultarTodosCargo();

	public Cargo consultarCargosPorId(Integer id);

	public List<Cargo> consultarCargosPeloSalario(double salario);

	// ---------------MARCA-----------------------
	public void inserir(Marca marca);

	public void alterar(Marca marca);

	public void remover(Marca marca);

	public List<Marca> consultarMarcas();

	public Marca consultarMarcasPorId(Integer id);

	public List<Marca> consultarMarcaPorNome(String marca);
	
	//-------------Modelo--------------------------------

	public void inserir(Modelo modelo);

	public void remover(Modelo modelo);

	public List<Modelo> consultarTodosModelo();

	public Modelo consultarModelosPorID(Integer id);

	public List<Modelo> consultarModeloPorNome(String modelo);

	public List<Modelo> consultarModelosPelaMarca(String marca);

	// ---------------PAGAMENTO-----------------------

	public void inserir(Pagamento pagamento);

	public void alterar(Pagamento pagamento);

	public void remover(Pagamento pagamento);

	public List<Pagamento> consultarTodosPagamento();

	public Pagamento consultarPagamentosPorId(Integer id);

	public List<Pagamento> consultarPagamentoPorData(Calendar dataPagamento);

	public List<Pagamento> consultarPorFormaPagamento(
			FormaPagamento formaPagamento);

	public List<Pagamento> consultarPagamentoPorContrato(Contrato contrato);

	// ---------------PERFIL-----------------------

	// public void inserir(Perfil perfil);
	// public void alterar(Perfil perfil);
	// public void remover(Perfil perfil);
	// public List<Perfil> consultarPerfis();
	// public Perfil consultarPerfisPorID(Integer id);

	// ---------------RESERVA-----------------------

	public void inserir(Reserva reserva) throws Exception;

	public void alterar(Reserva reserva) throws Exception;

	public void remover(Reserva reserva) throws Exception;

	public List<Reserva> consultarTodosReserva();

	public Reserva consultarReservasPorId(Integer id) throws Exception;

	public List<Reserva> consultarPorDataReserva(Date c) throws Exception;

	public List<Reserva> consultarReservaPorDataInicialLoc(Date c) throws Exception;

	public List<Reserva> consultarReservaPorDataFinalLoc(Date c) throws Exception;

	public List<Reserva> consultarReservaPorCliente(Cliente cliente) throws Exception;

	public List<Reserva> consultarReservaPorVeiculo(Veiculo veiculo) throws Exception;

	public List<Reserva> consultarReservaPorUsuarioPromotor(
			Usuario usuarioPromotor) throws Exception;
	
	public boolean reservaAtiva(Reserva reserva);

	// ---------------VEICULO-----------------------

	public void inserir(Veiculo veiculo) throws Exception;

	public void alterar(Veiculo veiculo) throws Exception;

	public void remover(Veiculo veiculo) throws Exception;

	public List<Veiculo> consultarTodosVeiculo();

	public Veiculo consultarVeiculosPorId(Integer id) throws Exception; 

	public List<Veiculo> consultarVeiculoPorPlaca(String placa) throws Exception;

	public List<Veiculo> consultarVeiculoPorChassi(String chassi) throws Exception;

	public List<Veiculo> consultarPorSituacaoDoVeiculo(SituacaoVeiculo s);

	public List<Veiculo> consultarVeiculosDeModeloX(String modelo) throws Exception;

	public List<Veiculo> consultarVeiculosDeMarcaX(String marca) throws Exception;

	public List<Veiculo> consultarVeiculoComQuilometragemEntre(
			float quilometragemMinima, float quilometragemMaxima);

	public List<Veiculo> consultarVeiculoPorCor(String cor) throws Exception;

	public List<Veiculo> consultarPorItemDoVeiculo(String item);

	public List<Veiculo> consultarPorItemDoVeiculo(String item, String item2);

	public List<Veiculo> consultarPorItemDoVeiculo(String item, String item2,
			String item3);

	public List<Veiculo> consultarVeiculoTipoDeCombustivel(
			TipoCombustivel tipoCombustivel);
	
	public List<Veiculo> filtroVeiculo(Veiculo veiculoFiltro, String operacao);

	// ---------------ItemDoVeiculo-----------------------

	public void inserir(ItemVeiculo itemVeiculo);

	public void alterar(ItemVeiculo itemVeiculo);

	public void remover(ItemVeiculo itemVeiculo);

	public List<ItemVeiculo> consultarTodosItemVeiculo();

	public ItemVeiculo consultarItemVeiculoPorId(Integer id);

	// ---------------Contrato-----------------------

	public void inserir(Contrato contrato)throws NegocioException;
	
	public void alterar(Contrato contrato);

	public void remover(Contrato contrato);

	public Contrato consultarContratoPorId(Integer id);

	public List<Contrato> consultarTodosContrato();

	public List<Contrato> consultarContratoPeloCliente(Cliente c);

	public List<Contrato> consultarContratoPeloValorFinal(double valorFinal);

	public List<Contrato> consultarContratoPelaDataInicial(Calendar dataAbertura);

	public List<Contrato> consultarContratoPelaDataEntrega(
			Calendar dataFechamento);

	public List<Contrato> consultarContratoPeloVeiculo(Veiculo veiculo);
	

	public double valorContrato(Contrato contrato) throws NegocioException;
	
	public boolean contratoFechado(Contrato contrato);
	
	public void fechar(Contrato contrato) throws NegocioException;
	
	public List<Contrato> consultarTodosAtivos();
	
	public void cancelar(Contrato contrato);

	// ---------------Gestor-----------------------

	public void inserir(Gestor gestor);

	public void alterar(Gestor gestor);

	public void remover(Gestor gestor);

	public List<Gestor> consultarTodosGestor();

	public Gestor consultarGestorPorId(Integer id);

	public List<Gestor> procurarGestorPeloTipoDeGerencia(
			TipoGerencia tipoGerencia);

	// ---------------Setor-----------------------

	public void inserir(Setor setor);

	public void alterar(Setor setor);

	public void remover(Setor setor);

	public List<Setor> consultarTodosSetor();

	public Setor consultarSetorPorId(Integer id);

	void alterar(Modelo modelo);

	// ---------------Usuario-----------------------

	public void inserir(Usuario entidade);

	public List<Usuario> consultarTodosUsuario();

	public void alterar(Usuario entidade);

	public void remover(Usuario entidade);

	public Usuario consultarUsuarioPorId(Integer id);
	
	public Usuario efetuarLogin(String login, String senha) throws Exception;

	// Funcionario
	public void inserir(Funcionario entidade);

	public List<Funcionario> consultarFuncionarios();

	public void alterar(Funcionario entidade);

	public void excluir(Funcionario entidade) throws NegocioException;

	public Funcionario consultarFuncionarioPorId(Integer id);

	// Empresa

	public void inserir(Empresa empresa);

	public List<Empresa> consultarTodosEmpresa();

	public void alterar(Empresa empresa);

	public void excluir(Empresa empresa);

	public Empresa consultarEmpresaPorId(Integer id);

	public List<Empresa> consultarPeloGestor(Gestor gestorResponsavel);

	public List<Empresa> consultarPorCidade(String cidade);

	public List<Empresa> consultarPeloTipo(TipoEmpresa tipoEmpresa);

	

	
	
	


}
